9

使用Git的操作流程

1.Git的下载与安装

首先去 https://git-scm.com/downloads 这个网站下载与自己电脑相匹配的Git的安装文件下载完毕后点击运行,一路点击next即可完成安装.

2.创建版本库

首先选择一个合适的地方,创建一个空目录,然后进入当前目录,在当前目录下右键,点击Git Bush,可以使用 pwd 命令来显示当前目录,接着使用 git init 命令把这个目录变成Git 可以管理的仓库然后你就会看到这个目录下多了一个.git的目录,这个目录就是 Git 来追踪和管理版本库的,如果系统默认隐藏了这类后缀名的文件你可能就会看不到,使用 ls-ah 命令就可以看见.

3.配置你的git仓库的用户邮箱和用户名

git config --global user.email "your email"
git config --global user.email "your name"

4.添加远程仓库

常用的git操作命令

(1) git clone <版本库的网址> <本地目录名> 克隆远程仓库到本地
我比较推荐: 去GitHub网站上创建一个项目仓库,复制仓库地址,然后再本地选择一个你想要存放这个项目的地方,新建一个空的文件夹,在这个文件夹下面右键选择git Bush,然后使用git clone <你复制的地址>,这里本地目录名省略则默认时当前目录,就可以把你的项目克隆到本地了.

(2) git add 添加文件到暂存区

  • git add <filepath>

添加你新建的文件到暂存区.

  • git add .

把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新(new)文件,但不包括删除的文件("."是匹配符,这里可以代指匹配所有).

  • git add -u

u(update的缩写),该命令仅监控已经被add的文件,它会将被修改的文件(即tracked file)提交到暂存区. 不会提交新文件(untracked file)

  • git add -A

是 git add . 和 git add -u 这两个命令功能的合集,提交所有修改的(modified)文件到暂存区,包括新文件(new).

  • git add -i

我们可以通过git add -i [<path>]命令查看<path>中被所有修改过或已删除文件但没有提交的文件,
补充: 通过git add <匹配符>的方式你可以添加符合特定条件的文件,例如hello* 表示添加以hello开头的文件的修改添加到暂存区,具体的写法大家可以自行百度下^_^^_^
git push -u origin master //把本地库的所有内容推送到远程库上

(3)git commit 提交修改的文件到工作区

  • git commit -m "<modify message>"

提交所有暂存区的文件

  • git commit -am | -a -m "<modify message>"

提交所有被跟踪的修改过的文件,包括没有进入暂存区的文件

  • git commit --amend

取消上一次的提交

(4) git pull //从远程仓库拉取数据同步到本地

(5) git push //从本地仓库推送(同步)修改到远程仓库

关于git push 的几个扩展的用法

  • git push -u origin master

如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push,不带任何参数的git push,默认只推送当前分支,这叫做simple方式,还有一种matching方式,会推送所有有对应的远程分支的本地分支, Git 2.0之前默认使用matching,现在改为simple方式如果想更改设置,可以使用git config命令。git config --global push.default matching OR git config --global push.default simple;可以使用git config -l 查看配置

  • git push --all origin

当遇到这种情况就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要 -all 选项

  • git push --force origin git

push的时候需要本地先git pull更新到跟服务器版本一致,如果本地版本库比远程服务器上的低,那么一般会提示你git pull更新,如果一定要提交,那么可以使用这个命令。

5.查看仓库文件的状态

使用 git status 命令可以让我们时刻掌握仓库当前的状态,比如那些文件被修改,那些文件需要提交等等.

6.比对版本间某文件的差异

使用 git diff "filename" 就可以查看某个文件修改前后的版本的不同

7.查看版本日志

使用 git log 命令我们可以查看某个项目从最近到最远的提交日志.如果内容太多,可以试试加上 --pretty=online 来进行筛选.

8. 查看历史操记录 git reflog

git reflog 可以记录你的每一次命令,方便你随时查看历史操作记录

9. git checkout -- filename

git checkout -- filename 这一指令可以将修改过但还未commit的文件版本返回至最近一次commit或者add的状态.

10. 关于版本控制的小结

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。git checkout -- file 还可以一键还原误删的文件.
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

11.删除文件

git rm filename
git commit -m "remove a file"

12.Git 分支

Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>

git merge --no-ff feature-x: 默认情况下,git执行"快进式合并",使用--no-ff参数后,会执行正常合并,当删除eature-x分支后,从分支历史上还可以看到给分支信息,但是如果是快进式合并,删除分支后,会丢掉分支信息.

删除分支:git branch -d <name>
强制删除没有被合并的分支: git branch -D <name>

13. 提交日志

git log: 打印版本提交日志.

14. 回退之前的版本Git reset

git reset(HEAD默认指向当前版本,也就是最新提交的版本,HEAD^表示当前版本的上一个版本, HEAD^^表示当前版本的上上个版本, ~n表示当前版本的上n个版本):
* git reset HEAD filename: 将某个文件从暂存区回退到工作区.
* git reset --soft HEAD~n: 意为将版本软回退n个版本,所谓软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区.
* git reset --mixed HEAD 8306e6eb46a(version code): 意为将版本硬回退到某一指定版本号对应的版本,将本地版本库的头指针全部重置到指定版本,且会重置缓存区,即本次提交之后的所有更改都会被移动到未暂存阶段.如果想要的工作区的代码也回退到这个版本,需要git pull一下,因为当前的HEAD指向了想要回退的那个版本,所以此时的更新就是相对于制定版本的更新.
* git reset --hard HEAD 8306e6eb46a(version code): 意为将版本硬回退到某一指定版本号对应的版本,但是不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并将工作代码回退到这个版本,就是比--mixed多了一个git pull.
* git reset --help  查看帮助
* git reset --hard  撤销本地修改,包括已经被提交到暂存区的修改撤回,干净的会退到上次提交之后的状态
* git clean -df  这个命令是撤销没有被提交到暂存区的本地修改




这里讲一讲多分支开发的合并,在正规的项目中,我们经常会采用多分支开发,主分支master, 开发分支develop(开发者们开发合并代码的分支),热更新分支hotFix(临时的用于解决上线项目运行时候的bug的分支),切分支的方法git branch <branchName>,提交的方式是向管理员提交pull request,步骤如下:

15. pull request

  • 第一步: git fetch --all: 拉取下来upstream,也就是拉取线上版本的代码,并将线上版本的代码和本地合并,并解决冲突.
  • 第二步: 合并以后测试,没有问题后push本地代码.
  • 第三步: 请求管理员把自己仓库的分支合并到原仓库的分支下,这就是pull request.

点击New Merge Request,选择要合并的源分支和目标分支,并添加合并的相关信息,可以
在description中@某个项目成员,也可以设置Assignee指定某个项目成员,这样他们可以会收到邮件要求进行Code review.

  • 第四步: Code Review阶段,收到邮件的成员可以针对更新的代码提出自己的意见,确认代码没有问题,就可以Accept Merge Request了,这时候你的代码就会被合并到master这个线上版本代码的分支上了.

16. 隐藏当前工作现场

当你正在写一个功能,这个时候你又需要切一个分支去修复bug,但是当前功能未写完,不想提交,就可以使用git stash命令,把当前工作区"隐藏"起来,等以后恢复现场后继续工作.
那么git stash帮我们把代码隐藏在哪里了呢? 通过指令git stash list可以查看所有暂存的stash工作区.
当你想要回来继续工作的时候,切回之前工作的分支,然后回复之前的状态有两个方法:

  • git stash apply: 恢复,恢复后,stash内容并不删除,你需要git stash drop来删除

;

  • git stash pop: 恢复的同事吧stash的内容也删了.

也可以多次stash,然后恢复指定的stash.

补充:
git rebase操作可以把本地未push的分叉提交历史整理成直线;

git rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。**

说明: 记得养成良好的习惯,每次添加修改和删除文件的时候都要先添加到暂存区再提交,每一次提交的时候要写说明,修改了哪些地方,方便日后查看.

推荐阅读

廖雪峰的Git教程


慢思考快行动
361 声望22 粉丝

有梦想但又不失风趣的程序员